package com.sais.manage.boot.daily.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sais.common.utils.UUIDUtils;
import com.sais.manage.boot.daily.dto.VisitorDTO;
import com.sais.manage.boot.daily.dto.VisitorSaveDTO;
import com.sais.manage.boot.daily.dto.VisitorSearchDTO;
import com.sais.manage.boot.daily.entity.Visitor;
import com.sais.manage.boot.daily.mapper.VisitorMapper;
import com.sais.manage.boot.daily.service.IVisitorService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.time.LocalDateTime;

/**
 * 宿舍管理系统-外来人员登记 service 实现类
 *
 * @author zwp
 * @date 2020/2/2
 **/
@Service
@Slf4j
public class VisitorServiceImpl implements IVisitorService {


    @Resource
    private VisitorMapper visitorMapper;

    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean saveVisitor(VisitorSaveDTO visitorSaveDTO) {
        String ukId = visitorSaveDTO.getUkId();
        if (StringUtils.isEmpty(ukId)) {
            createVisitor(visitorSaveDTO);
        } else {
            updateVisitor(visitorSaveDTO);
        }
        return true;
    }

    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean createVisitor(VisitorSaveDTO visitorSaveDTO) {
        Visitor visitor = visitorSaveDTO.convert();
        visitor.setUkId(UUIDUtils.getLower());
        visitorMapper.createVisitor(visitor);
        return true;
    }


    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean updateVisitor(VisitorSaveDTO visitorSaveDTO) {
        Visitor visitor = visitorSaveDTO.convert();
        visitor.setGmtModified(LocalDateTime.now());
        visitorMapper.updateById(visitorSaveDTO.convert());
        return true;

    }


    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean deleteVisitor(String visitorSaveDTO) {
        visitorMapper.deleteVisitor(visitorSaveDTO);
        return true;
    }


    @Override
    public VisitorDTO selectVisitor(String visitorId) {
        VisitorDTO visitorDTO = visitorMapper.selectVisitor(visitorId);
        return visitorDTO;
    }


    @Override
    public Page<VisitorDTO> listVisitor(Integer current, Integer size, VisitorSearchDTO visitorSearchDTO) {
        Page<VisitorDTO> page = new Page<>(current, size);
        return visitorMapper.listVisitor(page, visitorSearchDTO);
    }


}
